package reflect;

import java.lang.reflect.Method;
import java.util.Scanner;

/**
 * 反射机制调用无参方法;
 */
public class Demo05Reflect {
    public static void main(String[] args) throws Exception{
        //1.以前写法: 实例化 + 调方法;
        Person p = new Person();
        p.sayHello();

        //2.反射普通写法: 获取类对象 + 实例化 + 获取方法对象 + 调方法
        /*
        Class cls = Class.forName("reflect.Person");
        Object obj = cls.newInstance();
        Method method = cls.getMethod("sayHello");
        method.invoke(obj); //反射方式调用方法,等价于:obj.sayHello();
        */

        //3.反射灵活写法: 接收终端输入,调用某个类的某个方法;
        //3.1 接收输入
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入类的完全限定名:");
        String className = scanner.nextLine();
        System.out.println("请输入调用的方法名:");
        String methodName = scanner.nextLine();
        //3.2 反射方式:类对象+实例化+获取方法对象+调用方法;
        /*
            1.reflect.Person  ----  sayHi
            2.reflect.Person  ----  watchTV
            3.Student类中创建study方法,输出："学生" + name + "好好学习,天天向上"
         */
        Class cls = Class.forName(className);       //1.类对象;
        Object obj = cls.newInstance();             //2.实例化;
        Method method = cls.getMethod(methodName);  //3.方法对象;
        method.invoke(obj);                         //4.执行方法;
    }
}










